import axios from 'axios'
import { showFailToast } from 'vant'
import { tokenExpired } from '@/utils/dialog'

// 用于控制是否已经显示过错误提示
let isToastShowing = false

// 创建 axios 实例
const service = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL || '/', // 从环境变量读取 API 地址
  timeout: 10000, // 请求超时时间（毫秒）
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 这里可以根据需要添加 token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers['token'] = token
    }
    return config
  },
  error => {
    console.error('❌ 请求错误:', error)
    // 显示错误提示，避免重复显示
    if (!isToastShowing) {
      isToastShowing = true
      showFailToast('请求错误')
      setTimeout(() => {
        isToastShowing = false
      }, 2000)
    }
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    // 直接返回后端数据部分（根据后端格式调整）
    if (response.data.errors && response.data.errors.length) {
      const errors = response.data.errors || [];
      console.error('❌ 业务错误:', errors || '未知错误')
      // 显示业务错误提示，避免重复显示
      if (!isToastShowing) {
        isToastShowing = true
        showFailToast(errors[0] || '业务错误')
        setTimeout(() => {
          isToastShowing = false
        }, 2000)
      }

      return Promise.reject(response.data)
    }

    return response.data
  },
  error => {
    if (error.response) {
      // 检查是否为token失效 (401 Unauthorized)
      if (error.response.status === 401 || error.response.status === 403) {
        console.error('❌ Token失效或未授权')
        // 清除本地存储的token
        localStorage.removeItem('token')
        // 显示token失效提示
        tokenExpired();
      } else {
        console.error(`❌ HTTP错误 ${error.response.status}:`, error.response.data)
        // 显示HTTP错误提示，避免重复显示
        if (!isToastShowing) {
          isToastShowing = true
          showFailToast(`HTTP错误 ${error.response.status}`)
          setTimeout(() => {
            isToastShowing = false
          }, 2000)
        }
      }
    } else {
      console.error('❌ 网络错误或超时:', error.message)
      // 显示网络错误提示，避免重复显示
      if (!isToastShowing) {
        isToastShowing = true
        showFailToast('网络错误或超时')
        setTimeout(() => {
          isToastShowing = false
        }, 2000)
      }
    }
    return Promise.reject(error)
  }
)

// 二次封装 GET 请求
export function get(url, params = {}, config = {}) {
  return service.get(url, { params, ...config })
}

// 二次封装 POST 请求
export function post(url, data = {}, config = {}) {
  return service.post(url, data, config)
}

export default service